package com.swn.common.util;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 
* @ClassName: FRKSessionListener 
* @Description: •通过SessionListenr可以监听session的创建和销毁，步骤：
*					1.写一个类MySessionListener，实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
*					2.在web.xml中配置SessionListener：
*					<listener>
*					    <listener-class>com.success.common.util.FRKSessionListener</listener-class>
*					</listener>
*				•当session被创建和销毁时，容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法，
*				这两个方法中传入了一个参数对象HttpSessionEvent，可以通过此对象的getSession()方法获取session对象。 
* @author: chenql
* @date 2015-12-28 下午2:00:00
 */
public class FRKSessionListener implements HttpSessionListener {
	 //private int requestNum=0;//request请求次数
	/**
	 * session在创建时调用
	 */
    @SuppressWarnings("unchecked")
	public void sessionCreated(HttpSessionEvent event) {
           HttpSession session = event.getSession();//获取session对象
           session.setMaxInactiveInterval(1800);//设置超时时间（秒）
           ServletContext application = session.getServletContext();//获取所有session
           
           // 在application范围由一个HashSet集保存所有的session
           List<HttpSession> sessions = (List<HttpSession>) application.getAttribute("sessions");
           if (sessions == null) {
                  sessions = new ArrayList<HttpSession>();
                  application.setAttribute("sessions", sessions);
           }
           //session.setAttribute(ICommonConstants.REMOTEADDR, session.);//当前登录用户IP地址
           //session.setAttribute(ICommonConstants.REMOTEHOST, request.getRemoteHost());//当前登录用户主机名称
           // 新创建的session均添加到HashSet集中
           sessions.add(session);
           // 可以在别处从application范围中取出sessions集合

           // 然后使用sessions.size()获取当前活动的session数，即为“在线人数”
    }

    /**
     * session销毁时调用
     */
    @SuppressWarnings("unchecked")
	public void sessionDestroyed(HttpSessionEvent event) {
           HttpSession session = event.getSession();
           ServletContext application = session.getServletContext();
           List<HttpSession> sessions = (List<HttpSession>) application.getAttribute("sessions");
           
           // 销毁的session均从HashSet集中移除
           if(sessions!=null){
        	   sessions.remove(session);
           }
          
    }
    
   /* *//**
     * request请求激活时，触发该方法
     *//*
    public void requestInitialized(ServletRequestEvent event){
    	if(requestNum == 0){
	    	HttpServletRequest request = (HttpServletRequest) event
	        		    .getServletRequest();
			HttpSession session = request.getSession();
			//得到用户
			String username = (String) session.getAttribute("username");
			username = (username == null) ? "游客" : username;
			String sessionid = session.getId();
			String ip = request.getRemoteAddr();
			String page = request.getRequestURI();
			requestNum++;
    	}
    }

    *//**
     * request请求死亡时，触发该方法
     *//*
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		
	}*/
}
